import path from 'path'
import { defineConfig, loadEnv } from 'vite'
import Vue from '@vitejs/plugin-vue'
import Unocss from 'unocss/vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'
import simpleHtmlPlugin from 'vite-plugin-simple-html'
// import VueDevTools from 'vite-plugin-vue-devtools'
import { pluginPagePathes, pluginIcons } from './build/plugin-isme'
import vueJsx from '@vitejs/plugin-vue-jsx'

export default defineConfig(({ command, mode }) => {
  const isBuild = command === 'build'
  const viteEnv = loadEnv(mode, process.cwd())
  const { VITE_TITLE, VITE_PUBLIC_PATH, VITE_PROXY_TARGET } = viteEnv

  return {
    root:"/",    // index.html 文件位置
    base: VITE_PUBLIC_PATH || '/',   // 服务器文件位置
    plugins: [                     // 插件配置
      // VueDevTools(),
      Vue(),
      vueJsx(),
      Unocss(),
      AutoImport({
        imports: ['vue', 'vue-router'],
        dts: false,
      }),
      Components({
        resolvers: [NaiveUiResolver()],
        dts: false,
      }),
      simpleHtmlPlugin({
        minify: isBuild,
        inject: {
          data: {
            title: VITE_TITLE,
          },
        },
      }),
      // 自定义插件，用于生成页面文件的path，并添加到虚拟模块
      pluginPagePathes(),
      // 自定义插件，用于生成自定义icon，并添加到虚拟模块
      pluginIcons(),
    ],
    publicDir:"public",             // 始终按原样提供的文件 不经过打包 可以通过路径直接访问
    resolve: {
      alias: {                      // 路径别名
        '@': path.resolve(process.cwd(), 'src'),
        '~': path.resolve(process.cwd()),
      },
      extensions :['.js', '.ts', '.jsx', '.tsx', '.json'], // 省略的扩展名
    },
    server: {
      host: '0.0.0.0',              // 指定服务器监听地址指定服务器应该监听哪个 IP 地址。 如果将此设置为 0.0.0.0 或者 true 将监听所有地址，包括局域网和公网地址。
      port: 3200,                   // 服务器端口
      open: false,                  // 自动在浏览器中打开应用程序
      proxy: {                      // 反向代理
        '/api': {
          target: VITE_PROXY_TARGET,
          changeOrigin: true,
          rewrite: (path) => path.replace(new RegExp('^/api'), ''),
          secure: false,
          configure: (proxy, options) => {
            // 配置此项可在响应头中看到请求的真实地址
            proxy.on('proxyRes', (proxyRes, req) => {
              proxyRes.headers['x-real-url'] = new URL(req.url || '', options.target)?.href || ''
            })
          },
        },
      },
    },
    css: {                          // 处理css插件
      postcss: {
          plugins: {
 
          }
      }
    },
    build: {                        // 打包
      outDir: 'dist',               // 打包文件的输出目
      assetsDir: 'assets',          // 静态文件的存放目录
      chunkSizeWarningLimit: 1024,  // chunk 大小警告的限制（单位kb）
    },
  }
})
